add pay/wx/notify_url

FFIB 5 gadi atpakaļ
vecāks
revīzija
8ca2aa51e3
3 mainītis faili ar 29 papildinājumiem un 3 dzēšanām
  1. 1 0
      api/urls.py
  2. 1 1
      kodosale/deploy.bak/kodosale_nginx.conf
  3. 27 2
      pay/views.py

+ 1 - 0
api/urls.py

@@ -17,6 +17,7 @@ urlpatterns += [
17 17
 
18 18
 urlpatterns += [
19 19
     url(r'^pay/wx/order_create$', pay_views.wx_order_create_api, name='wx_order_create_api'),   # 订单创建
20
+    url(r'^pay/wx/notify_url$', pay_views.wx_notify_url_api, name='wx_notify_url_api'),  # 支付异步通知回调地址
20 21
 ]
21 22
 
22 23
 urlpatterns += [

+ 1 - 1
kodosale/deploy.bak/kodosale_nginx.conf

@@ -93,4 +93,4 @@ server {
93 93
         proxy_pass  http://kodosale;
94 94
         include     /home/diors/work/kodosale/kodosale/deploy/uwsgi_params; # the uwsgi_params file you installed
95 95
     }
96
-}
96
+}

+ 27 - 2
pay/views.py

@@ -67,7 +67,7 @@ def wx_order_create_api(request):
67 67
             return response(PackGoodsStatusCode.PACK_GOODS_NOT_FOUND)
68 68
 
69 69
     # 金额校验
70
-    if reduce(lambda g1, g2: g1.price * g1.num + g2.price * g2.num, goods_info) != total_fee:
70
+    if reduce(lambda g1, g2: g1.get('price', 0) * g1.get('num', 0) + g2.get('price', 0) * g2.get('num', 0), goods_info) != total_fee:
71 71
         return response(OrderStatusCode.FEE_CHECK_FAIL)
72 72
 
73 73
     # JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付,统一下单接口trade_type的传参可参考这里
@@ -94,7 +94,7 @@ def wx_order_create_api(request):
94 94
     try:
95 95
         prepay_data = wxpay.order.create(
96 96
             body=body,
97
-            notify_url=settings.API_DOMAIN + '/wx/notify_url',
97
+            notify_url=settings.API_DOMAIN + 'pay/wx/notify_url',
98 98
             out_trade_no=order.order_id,
99 99
             total_fee=total_fee,
100 100
             trade_type=trade_type,
@@ -136,3 +136,28 @@ def order_paid_fail(order):
136 136
 
137 137
     order.pay_status = OrderInfo.FAIL
138 138
     order.save()
139
+
140
+@logit
141
+@transaction.atomic
142
+def wx_notify_url_api(request):
143
+    """ 支付异步通知回调地址 """
144
+    notify_data, success = check_pay_notify(request.body, wx_configs=settings.WECHAT)
145
+    if not success:
146
+        return HttpResponse(WXPAY_NOTIFY_FAIL)
147
+
148
+    try:
149
+        order = OrderInfo.objects.select_for_update().get(order_id=notify_data.get('out_trade_no', ''), status=True)
150
+    except OrderInfo.DoesNotExist:
151
+        return HttpResponse(WXPAY_NOTIFY_FAIL)
152
+
153
+    order.notify_msg = request.body
154
+    order.transaction_id = notify_data.get('transaction_id', '')
155
+    order.save()
156
+
157
+    result_code = notify_data.get('result_code', '')
158
+    if result_code == 'SUCCESS':
159
+        order_paid_success(order)
160
+    else:
161
+        order_paid_fail(order)
162
+
163
+    return HttpResponse(WXPAY_NOTIFY_SUCCESS)